package dao

import (
	"context"
	"fmt"
	"order_srv/basic/config"
	"order_srv/handler/models"
	"time"

	"gorm.io/gorm"
)

// CreateOrderComplaint 创建投诉
func CreateOrderComplaint(ctx context.Context, complaint *models.OrderComplaint) error {
	// 参数校验
	if complaint.OrderID == 0 {
		return fmt.Errorf("订单ID不能为空")
	}
	if complaint.ComplainantID == "" || complaint.RespondentID == "" {
		return fmt.Errorf("投诉人或被投诉人ID不能为空")
	}
	if complaint.ComplaintType == 0 {
		return fmt.Errorf("投诉类型不能为空")
	}
	if complaint.Title == "" || complaint.Content == "" {
		return fmt.Errorf("投诉标题和内容不能为空")
	}

	// 生成投诉单号
	complaint.ComplaintNo = generateComplaintNo()

	err := config.DB.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
		// 1. 创建投诉
		if err := tx.Create(complaint).Error; err != nil {
			return fmt.Errorf("创建投诉失败: %w", err)
		}

		// 2. 记录订单状态日志 (如果需要，可以记录投诉相关的订单状态变更)
		// 例如：statusLog := &models.OrderStatusLog{...} tx.Create(statusLog)

		return nil
	})

	if err != nil {
		return err
	}
	return nil
}

// 业务逻辑辅助函数

// generateComplaintNo 生成投诉单号
func generateComplaintNo() string {
	return fmt.Sprintf("COM%d", time.Now().UnixNano())
}
